﻿#pragma once

#include <QMainWindow>
#include "ui_QtWidgetsClass.h"
#include <QFrame>
#include <QVBoxLayout>
#include <QPushButton>
#include "TaskManager.h"
#include <QListWidget>
#include <QLabel>
class QtWidgetsClass : public QMainWindow
{
    Q_OBJECT

public:

    QtWidgetsClass(QWidget* parent = nullptr);
    ~QtWidgetsClass();

    /**
     * @brief 添加任务项到任务列表
     * @param task 任务对象的 unique_ptr，所有权将被转移
     */
    void addTaskItem(std::unique_ptr<ImageTask> task);

    /**
     * @brief 处理任务项双击事件，显示任务配置界面
     * @param item 被双击的任务项
     */
    void onTaskItemDoubleClicked(QListWidgetItem* item);

private slots:
    /**
     * @brief 处理执行按钮点击事件，执行所有任务并显示结果
     */
    void on_pushButton_execute_clicked();

    /**
     * @brief 处理减少按钮点击事件，移除选中的任务
     */
    void on_toolButton_decrease_clicked();

    /**
     * @brief 处理任务类型选择事件，添加新任务
     * @param action 被选中的菜单项
     */
    void onTaskTypeSelected(QAction* action);

	/**
	 * @brief 处理任务列表右键事件
	 * @param pos 右键的位置
	 */
    void onContextItemRequested(const QPoint& pos);

protected:
	
	//void resizeEvent(QResizeEvent* event) override;

private:
    /**
     * @brief 显示图像到 resultLabel
     * @param image 要显示的图像
     */
    void displayImage(const cv::Mat& image);

    /**
     * @brief 初始化界面控件
     */
    void initUi();

	/**
	 * @brief 初始化菜单
	 */
	void initMenu();

    /**
     * @brief 初始化信号槽连接
     */
    void initConnections();

private:  // 数据成员
    TaskManager taskManager;                // 任务管理器，管理任务序列
    std::map<QListWidgetItem*, ImageTask*> itemToTaskMap; // 任务项到任务对象的映射
    QLabel* resultLabel;                    // 显示结果图像的标签

private:  // UI 成员
    Ui::QtWidgetsClassClass ui;             // UI 对象，管理界面控件
    QMenu* taskMenu;                        // 任务类型选择菜单
};
